#!/bin/bash

# 获取脚本的绝对路径
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
SCRIPT_PATH="$SCRIPT_DIR/$(basename "$0")"

# 帮助信息
show_help() {
  cat <<EOF
Usage: $0 <command> [arguments]
Commands:
  install <TOKEN> <HOSTNAME> [SLEEP_TIME]
      安装并启用 dynv6-ipv4 服务，SLEEP_TIME 为可选参数，单位为秒，默认为 300 秒。

  update <TOKEN> <HOSTNAME> [SLEEP_TIME]
      更新 dynv6-ipv4 服务参数并重启，SLEEP_TIME 为可选参数，单位为秒，默认为 300 秒。

  remove
      卸载 dynv6-ipv4 服务。

  start
      启动 dynv6-ipv4 服务。

  stop
      停止 dynv6-ipv4 服务。

  restart
      重启 dynv6-ipv4 服务。

  help
      显示此帮助信息。

Examples:
  $0 install "my-token" "example.dynv6.net" 600 
  $0 update "new-token" "new.example.dynv6.net" 600 
  $0 remove
EOF
}

# 检查输入参数
if [[ $# -lt 1 ]]; then
  show_help
  exit 1
fi

ACTION="$1"
TOKEN="$2"
HOSTNAME="$3"
SLEEP_TIME="${4:-300}"  # 默认的 sleep 时间为 300 秒

SERVICE_FILE="/etc/systemd/system/dynv6-ipv4.service"

# 获取ipv4公网IP
get_ipv4_address() {
    # 使用curl命令获取公网IP
    curl -s https://ipinfo.io/ip
}

# 更新操作
updateipv4() {
  local ipv4=$1
  local update_url="http://dynv6.com/api/update?hostname=$HOSTNAME&token=$TOKEN&ipv4=$ipv4"
  
  # 增强的 wget 错误处理
  wget --no-check-certificate -q -O dynv6-ipv4.log "$update_url"
  if [[ $? -eq 0 ]]; then
    echo "dynv6-ipv4 更新成功，日志保存在 dynv6-ipv4.log"
  else
    echo "dynv6-ipv4 更新失败，请检查日志 dynv6-ipv4.log"
  fi
}

# 更新服务文件
update_service_file() {
  echo "更新服务文件：$SERVICE_FILE"
  cat <<EOF > "$SERVICE_FILE"
[Unit]
Description=Dynv6-ipv4 Dynamic DNS Updater
After=network.target

[Service]
ExecStart=/bin/bash "$SCRIPT_PATH" main "$TOKEN" "$HOSTNAME" "$SLEEP_TIME"
Restart=always
User=root

[Install]
WantedBy=multi-user.target
EOF
  systemctl daemon-reload
}

# 安装服务
install() {
  if [[ -f "$SERVICE_FILE" ]]; then
    echo "服务已存在，请使用 update 参数更新服务或 remove 参数卸载服务。"
    exit 1
  fi
  update_service_file
  systemctl enable --now dynv6-ipv4.service
  echo "dynv6-ipv4 服务安装完成并已启动。"
}

# 更新服务参数
update() {
  if [[ ! -f "$SERVICE_FILE" ]]; then
    echo "服务未安装，请先使用 install 参数安装服务。"
    exit 1
  fi
  update_service_file
  systemctl restart dynv6-ipv4.service
  echo "dynv6-ipv4 服务参数已更新并重启。"
}

# 卸载服务
remove() {
  if [[ -f "$SERVICE_FILE" ]]; then
    systemctl stop dynv6-ipv4.service
    systemctl disable dynv6-ipv4.service
    rm -f "$SERVICE_FILE"
    systemctl daemon-reload
    echo "dynv6-ipv4 服务已卸载。"
  else
    echo "服务未安装，无需卸载。"
  fi
}

# 主逻辑
main() {
  if [[ -z "$TOKEN" || -z "$HOSTNAME" ]]; then
    echo "TOKEN 和 HOSTNAME 不能为空"
    exit 1
  fi
  
  while true; do
    echo "开始更新 dynv6-ipv4 记录..."
    local ipv4_address=$(get_ipv4_address)
    echo "ipv4 地址: $ipv4_address"
    echo "全球单播 ipv4 地址: $ipv4_address"
    echo "域名: $HOSTNAME"
    updateipv4 "$ipv4_address"
    sleep "$SLEEP_TIME"  # 使用自定义的 sleep 时间
  done
}

# 参数处理
case "$ACTION" in
  install)
    install
    ;;
  update)
    update
    ;;
  remove)
    remove
    ;;
  start)
    systemctl start dynv6-ipv4.service
    echo "dynv6-ipv4 服务已启动。"
    ;;
  stop)
    systemctl stop dynv6-ipv4.service
    echo "dynv6-ipv4 服务已停止。"
    ;;
  restart)
    systemctl restart dynv6-ipv4.service
    echo "dynv6-ipv4 服务已重启。"
    ;;
  help)
    show_help
    ;;
  main)
    main
    ;;
  *)
    echo "未知操作: $ACTION"
    show_help
    exit 1
    ;;
esac
